package com.herr.singleton;

/**
 * 4、双检锁/双重校验锁（DCL，即 double-checked locking）
 * 是否 Lazy 初始化：是
 * 是否多线程安全：是
 * 描述：这种方式采用双锁机制，安全且在多线程情况下能保持高性能。
 */
public class DCLSingleton {
    private volatile static DCLSingleton singleton;
    private DCLSingleton(){}
    public static DCLSingleton getSingleton() {
        if (singleton == null) {
            synchronized (DCLSingleton.class) {
                if (singleton == null) {
                    singleton = new DCLSingleton();
                }
            }
        }
        return singleton;
    }


    public void showMessage(){
        System.out.println("Hello com.herr.singleton.DCLSingleton!");
    }
}
